Day 11 :
規格書中簡易的造幣合約,藉由這個合約,學習幾個新的識別字與其功能。
pragma solidity ^0.4.22;
contract Coin {
address public minter;
mapping (address => uint) public balances;
event Sent(address from, address to, uint amount);
function coin() public {
minter = msg.sender;
}
function mint(address receiver, uint amount) public {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
function send(address receiver, uint amount) public {
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
}
address :
以太方中的地址,佔有20個位元組,address不能做任何算術運算,也可以用uint160表示。
mappimg :
映射,對應類型的變數,以Coin合約中的程式碼舉例 :
amount = 2; address = 某個帳戶地址,
balances[address] += amount 則 balances[address] = 2。
msg.sender :
呼叫者的帳戶地址。
event :
事件,簡要的來說就是追蹤交易並紀錄傳進event的參數,觸發event要使用emit參數。
Function 說明 :
coin : 將帳戶設定成minter
當某個帳戶呼叫時,會將minter設定成呼叫coin的帳戶地址。
mint : 製造錢幣
• 判斷 呼叫mint的帳戶是不是minter,若不是直接返回。
• 若呼叫mint的帳戶是minter,將執行以下敘述。
send : 將錢幣給予某個帳戶
• 傳入(收款帳戶地址,發送金額)。
• 判斷呼叫者的餘額是否大於或等於發送金額,若小於直接返回。
• 若大於或等於,將呼叫者的餘額減掉發送金額。
• 將發送金額給予收款帳戶地址。
• 發送事件紀錄傳進的參數(呼叫者的帳戶,收款者的帳戶,發送金額)。